package main

import "fmt"

func main() {
	var a int
	//变量有两层含义，内存内容和内存地址（又叫指针）
	fmt.Printf("a=%v\n", a)
	fmt.Printf("&a=%v\n", &a)
	//保存某个变量的地址需要指针类型， *int 保存int的地址，**int,保存 *int的地址
	//定义一个变量p,类型为*int
	var p *int
	p = &a   //p指针类型变量可以被内存地址赋值
	*p = 666 //操作的不是内存地址，而是指针变量指向的内存内容
	fmt.Printf("a=%v\n", a)
	*&a = 777 //也可以直接用* 操作内存地址
	fmt.Printf("a=%v\n", a)

	//合法使用指针
	var i *int
	var j int
	i = &j
	*i = 888
	//也可以用new分配内存
	i = new(int)
	*i = 999
	fmt.Printf("*i=%v\n", *i)

}
